<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <script type="module">

        // Generator 函数可以不用yield表达式，这时就变成了一个单纯的暂缓执行函数。

        // function* f() {
        //   console.log('执行了！')
        // }
        // var generator = f();
        // setTimeout(function () {
        //   generator.next()
        // }, 2000);


        // var arr = [1, [[2, 3], 4], [5, 6]];

        // var flat = function* (a) {
        //     for (var item of a) {
        //         if (typeof item !== 'number') {
        //             // for(let item2 of flat(item)){
        //             //   yield  item2;
        //             // }
        //             yield* flat(item);// 递归  ES6 提供了yield*表达式，作为解决办法，用来在一个 Generator 函数里面执行另一个 Generator 函数。
        //         } else {
        //             yield item;
        //         }
        //     }
        // };

        // for (var f of flat(arr)) {
        //     console.log(f);
        // }


        // function* demo() {
        //     console.log('Hello' + (yield '000')); // OK
        //     console.log('Hello' + (yield '111')); // OK
        // }

        // for(let item  of demo()){
        //     console.log(item);
        // }

        // function* demo() {
        //     foo(yield 'a', yield 'b'); // OK
        //     let input = yield; // OK
        // }
        // function foo(a, b){
        //     console.log(a + "" + b);
        // }

        // for(let item of demo()){
        //     console.log(item);
        // }


        //     let mg = function *(){
        //         console.log(yield 1);
        //         console.log(yield 2);
        //         console.log(yield 3);
        //         console.log(yield 4);
        //         console.log(yield 5);
        //         return "5"
        //     }

        //     let mg0 =function myGenerator0(tmg){

        //         let tmg0= tmg();
        //         return function(){               
        //             tmg0.next();
        //             return tmg0;
        //         }
        //     } 

        //    let myGenerator= mg0(mg)();
        //     let r1=myGenerator.next(11);
        //     let r2=myGenerator.next(22);
        //     let r3=myGenerator.next(33);
        //     let r4=myGenerator.next(44);

        // let delegatedIterator = (function* () {
        //     yield 'Hello!';
        //     yield 'Bye!';
        // }());

        // let delegatedIterator =(function*  () {
        //     yield 'Hello!';
        //     yield 'Bye!';
        // })();

        // let delegatingIterator = (function* () {
        //     yield 'Greetings!';
        //     yield* delegatedIterator;
        //     yield 'Ok, bye.';
        // }());

        // for (let value of delegatingIterator) {
        //     console.log(value);
        // }

        //     function* gen() {
        //         yield* ["a", "b", "c"];
        //     }


        //    for(let item of gen()){
        //     console.log(item);
        //    }

        // function* g() { }

        // g.prototype.hello = function () {
        //     return 'hi!';
        // };

        // let obj = g();

        // obj instanceof g // true
        // obj.hello() // 'hi!'

        // console.log(obj);
        // console.log(obj.__proto__);
        // console.log(obj.__proto__ === g.prototype);


        // function* gen() {
        //     yield 1;
        //     return 2;
        // }

        // let g = gen();

        // console.log(
        //     g.next().value,
        //     g.next().value,
        // );

        // for (let item of g){
        //     console.log(item);
        // }

    </script>
</head>

<body>

</body>

</html>